﻿using System.Threading.Tasks;
using DotNetStar.OpenSDK.OAuth;

namespace DotNetStar.OpenSDK.WeChat
{
    using MP;
    /// <summary>
    /// 微信公众平台的扩展。
    /// </summary>
    public static class WeChatMPExtensions
    {
        /// <summary>
        /// 以异步的方式获取微信服务器ip列表。
        /// </summary>
        /// <param name="weChatMP">微信公众平台的实例。</param>
        /// <param name="request">获取 ip 列表的 api 请求。</param>
        /// <returns>这是一个任务，任务结束后返回 <see cref="IpListResponse"/> 的结果。</returns>
        public static Task<IpListResponse> GetIpListAsync(this WeChatMPPlatform weChatMP, IpListApiRequest request)
            => ApiClient.ExecuteAsync(request);

        /// <summary>
        /// 以异步的方式获取用户的信息。
        /// </summary>
        /// <param name="weChatMP">微信公众平台的实例。</param>
        /// <param name="request">获取用户信息的请求。</param>
        /// <returns>这是一个任务，任务结束后返回 <see cref="UserInfoApiResponse"/> 的结果。</returns>
        public static Task<UserInfoApiResponse> GetUserInfoAsync(this WeChatMPPlatform weChatMP, UserInfoApiRequest request)
            => ApiClient.ExecuteAsync(request);

        /// <summary>
        /// 以异步的方式获取关注当前公众平台的用户列表。
        /// </summary>
        /// <param name="weChatMP">微信公众平台的实例。</param>
        /// <param name="request">获取用户列表的 api 请求。</param>
        /// <returns>这是一个任务，任务结束后返回 <see cref="UserListApiResponse"/> 的结果。</returns>
        public static Task<UserListApiResponse> GetUserListAsync(this WeChatMPPlatform weChatMP, UserListApiRequest request)
            => ApiClient.ExecuteAsync(request);

        /// <summary>
        /// 以异步的方式生成带参数的二维码。
        /// </summary>
        /// <param name="weChatMP">微信公众平台的实例。</param>
        /// <param name="request">生成二维码的 api 请求。</param>
        /// <returns>这是一个任务，任务结束后返回 <see cref="QrCodeApiResponse"/> 的结果。</returns>
        public static Task<QrCodeApiResponse> GenerateQrCodeAsync(this WeChatMPPlatform weChatMP, QrCodeApiRequest request)
            => ApiClient.ExecuteAsync(request);

        /// <summary>
        /// 以异步的方式将指定的长链接转换成短链接。
        /// </summary>
        /// <param name="weChatMP">微信公众平台的实例。</param>
        /// <param name="request">转成短链接的 api 请求。</param>
        /// <returns>这是一个任务，任务结束后返回 <see cref="ShortUrlApiResponse"/> 的结果。</returns>
        public static Task<ShortUrlApiResponse> ToShortUrlAsync(this WeChatMPPlatform weChatMP, ShortUrlApiRequest request)
            => ApiClient.ExecuteAsync(request);
    }
}
